/**
 * author:chenping
 * email:375129701@qq.com
 * 本库需要 jquery \ layer 库的支持
 */
// jquery 自定义序列化表单数据
jQuery.prototype.serializeObject = function () {
    var obj = new Object();
    $.each(this.serializeArray(), function (index, param) {
        if (!(param.name in obj)) {
            obj[param.name] = param.value;
        }
    });
    return obj;
};

/**
 * 表单提交
 * @param elm 表单元素 【class|id】
 * @param data 发送数据 【object】
 * @param suc 请求成功后的操作 【function】
 * @param err 请求失败后的操作 【function】
 * @param method 请求方式 【get|post】
 * @param dataType 数据类型
 * @param dataType 数据类型
 */
function ajaForm(elm, param = {}) {
    //请求方式
    if (typeof param.type == 'undefined') param.type = 'get';
    //请求p地址
    if (typeof param.url == 'undefined') param.url = '';
    //数据类型
    if (typeof param.dataType == 'undefined') param.dataType = 'json';
    //请求类型
    if (typeof param.data == 'undefined') param.data = '';
    //成功回跳地址
    if (typeof param.sucJump == 'undefined') param.sucJump = ''
    //错误回调跳址
    if (typeof param.errJump == 'undefined') param.errJump = '';
    //开启回跳地址
    if (typeof param.isJump == 'undefined') param.isJump = false;

    if (typeof param.jsSubmit == 'undefined') param.jsSubmit = true;

    if (param.isSubmit == false) {
        if (param.data == '') param.data = $(this).serializeArray();
        ajax({
            type: $(this).attr("method") ? $(this).attr("method") : param.type,
            url: $(this).attr("action")?$(this).attr("action"):param.url,
            dataType: param.dataType,
            data: param.data,
            success: param.success,
            error: param.error,
            sucJump: param.sucJump,
            errJump: param.errJump,
            isJump: param.isJump,
            beforeSend: param.beforeSend,
        })
        param.data = '';
        /// console.log(param.data)
        return false;
    }

    //监听表达那请求
    $(elm).submit(function (e) {
        //阻止表单默认提交
        if (param.data == '') param.data = $(this).serializeArray();  //json数据
        //序列化表单
        //var d_ = $(elm).serialize() //username=name&password=123
        //把表单信息序列化成一个JSON对象
        //console.log(param.data)
        ajax({
            type: $(this).attr("method") ? $(this).attr("method") : param.type,
            url: $(this).attr("action"),
            dataType: param.dataType,
            data: param.data,
            success: param.success,
            error: param.error,
            sucJump: param.sucJump,
            errJump: param.errJump,
            isJump: param.isJump,
            beforeSend: param.beforeSend,
        })
        //清楚遗留的数据
        param.data = '';
        e.preventDefault();
        return false;
    });
}

/**
 * jquery 异步请求
 * @param param
 * return {
 *     code:0,
 *     msg:'info',
 *     data:''
 * }
 */
function ajax(param = {}) {

    //开启回跳地址
    if (typeof param.isJump == 'undefined') param.isJump = false;
    /**
     * 请求成功后的操作
     * @param d
     */
    var success = function (d) {
        console.log(d.msg)

        //检测是否有信息提示
        if (d.code == 'undefined' || d.code == '' && d.code != 0) {
            return layer.msg('请正确返回数据格式', {
                icon: 7
            });
        }
        switch (d.code) {
            //成功提示信息
            case 1:
                layer.msg(d.msg, {
                    icon: 1
                });
                break;
            //失败提示信息
            case 0:
                layer.msg(d.msg, {
                    icon: 2
                });
                break;
            //既不是等于1 也不是等于0
            default:
                layer.msg(d.msg, {
                    icon: 7
                });
                break
        }
        if (param.isJump == true) {
            //成功回跳地址
            if (typeof param.sucJump == 'undefined' || param.sucJump == '') {
                if (typeof d.url != 'undefined' && d.code == 1) {
                    location.href = d.url
                } else {
                    // history.go(-1)
                }
            } else {
                location.href = param.sucJump
            }
        }
        if (typeof param.success == 'function' || param.success == 'undefined') {
            param.success(d)
        }
    };

    /**
     * 请求失败操作
     * @param res
     */
    var error = function (jqXHR, textStatus, errorThrown) {
        //数据格式返回错误
        if (textStatus == 'parsererror') {
            layer.msg('请正确返回数据格式', {
                icon: 5
            });
        }
        //请求错误问题
        if (textStatus == 'error') {

            switch (jqXHR.status) {
                //请求地址不存在
                case 404:
                    layer.msg("你所请求的地址无法找到", {
                        icon: 2
                    });
                    break;
                //服务器端代码出错
                case 500:
                    layer.msg("你请的地址资源出错了~请稍后再试", {
                        icon: 5
                    });
                    break;
                default:
                    layer.msg(jqXHR.statusText, {
                        icon: 7
                    });
                    break;
            }
        }
        if (param.isJump == true) {
            //成功回跳地址
            if (typeof param.errJump == 'undefined' || param.sucJump == '') {
                // history.go(-1)
            } else {
                location.href = param.errJump
            }
        }
        if (typeof param.error == 'function' || param.error == 'undefined') {
            param.error(jqXHR, textStatus, errorThrown)
        }
    };

    var beforeSend = function (XHR) {
        if (typeof param.beforeSend == 'function' || param.beforeSend == 'undefined') {
            return param.beforeSend(XHR)
        }
    }

    //请求方式
    if (typeof param.type == 'undefined') param.type = 'get';
    //请求地址
    if (typeof param.url == 'undefined') param.url = '';
    //数据类型
    if (typeof param.dataType == 'undefined') param.dataType = 'json';
    //请求类型
    if (typeof param.data == 'undefined') param.data = {};

    /**
     *  自定义返回操作
     */
    //if(typeof param.success=='function' || param.success=='undefined') success = param.success;
    //if(typeof param.error=='function' || param.error=='undefined') error  = param.error;

    console.log(param.data)

    //发送请求
    return $.ajax({
        type: param.type,
        url: param.url,
        dataType: param.dataType,
        data: param.data,
        success: success,
        error: error,
        beforeSend: beforeSend,
    })
}


/**
 * 基础版短信发送装置
 * @param elm 【class | id】
 * @param telphone 【电话】
 * @param url 【发送地址】
 * @param inputClass 【自定class】
 * @param btnClass 【自定义class】
 * @param name 【name 字段】
 * @param field 【字段】
 * @param data 【额外数据】
 */
function sendMsg(elm,param = {}) {
    var code =  param.name? param.name:'smgCode';
    var html = '<div class="msg-box">' +
        '<input type="text" class="smgCode-input ' + param.inputClass + '" placeholder="验证码" value="" name="'+code+'">' +
        '<button type="button" class="send-msg-btn ' + param.btnClass + '">获取验证</button>' +
        '</div>'
    $(elm).append(html)

    $(elm).find(".msg-box>.send-msg-btn").click(function (ev) {
        ///var tel = $(param.telphone).val();
        if (isPhone(param.tel) == true||param.data()) {
            ajax({
                url: param.url,
                data:param.data(elm),
                success: function (d) {
                    //60 秒倒计时开始
                    var wait = param.wait?param.wait:60;
                    $(elm).find('.msg-box>.send-msg-btn').text(wait + 's');
                    var timer = setInterval(function () {
                        if (wait == 0) {
                            $(elm).find('.msg-box>.send-msg-btn').text('获取验证码').attr("disabled", false);
                            clearInterval(timer)
                        } else {
                            wait--;
                            $(elm).find('.msg-box>.send-msg-btn').attr("disabled", true).text(wait + 's');
                        }
                    }, 1000);
                    //60 秒倒计结束
                },
                error: function (error) {
                    console.log(error)
                }
            })
        } else {
            layer.msg("请输入正确得手机号！", {icon: 7})
        }
    })
}

/**
 * 验证手机号
 * @param phone 手机号码
 * @returns {boolean}
 */
function isPhone(phone) {
    //检测手机号是否为空值
    if (phone == '') {
        layer.msg("请填写手机号！", {icon: 7})
    } else {
        var pattern = /^1[3465789]\d{9}$/;
        return pattern.test(phone);
    }
}

/**
 * 批量删除数据
 * @param elm 【class|id】
 * @param input 【复选框】
 * @param url 【请求地址】
 * @param succ 【请求成功】
 * @param err 【请求失败】
 */
function deleteAll(elm, input, url, succ, err) {
    $(elm).click(function () {
        var tempArray = new Array();
        $(input + "[type=checkbox]:checked").each(function (i) {
            tempArray[i] = $(this).val();
        });
        //var idstr=tempArray.join(',');
        //console.log(tempArray);
        if (tempArray.length > 0) {
            layer.confirm('是否确定删除', {icon: 3, title: '提示'}, function (index) {
                ajax({
                    url: url,
                    success: succ,
                    error: err,
                    data: tempArray
                });
                layer.close(index);
            });
        } else {
            layer.msg("请勾选数据");
        }
    })
}

/**
 * 逐条删除数据
 * @param elm 【class|id】
 * @param data 【删除数据】
 * @param url 【请求地址】
 * @param succ 【请求成功】
 * @param err 【请求失败】
 */
function del(elm, data, url, succ, err) {
    var objEvt = $._data($(elm)[0], "events");
    if (objEvt && objEvt["click"]) {
        if (data.length > 0) {
            layer.confirm('是否确定删除', {icon: 3, title: '提示'}, function (index) {
                ajax({
                    url: url,
                    success: succ,
                    error: err,
                    data: data
                });
                layer.close(index);
            });
        } else {
            layer.msg("请选择数据");
        }
    } else {
        $(elm).click(function () {
            if (data.length > 0) {
                layer.confirm('是否确定删除', {icon: 3, title: '提示'}, function (index) {
                    ajax({
                        url: url,
                        success: succ,
                        error: err,
                        data: data
                    });
                    layer.close(index);
                });
            } else {
                layer.msg("请选择数据");
            }
        })
    }
}

/**
 * 文件上传
 * @param param
 */
function uploadFile(param = {}) {
    var data;
    //绑定操作按钮
    $(param.upBtn).click(function () {
        var upContainer = '<div id="UpContainer">'+
            '<div class="AddFile">'+
            '<div class="AddBtn">+</div>'+
            '<div class="AddBtn_Tip">点击添加文件</div>'+
            '</div>'+
            '<div class="FilsList">' +
            '<ul>' +
            '</ul>'+
            '</div>'
            +'</div>';
        layer.open({
            title:"文件上传",
            content:upContainer,
            area:["600px","500px"],
            success:function (index) {
                var uploader = WebUploader.create({
                    // swf文件路径
                    swf:'/webupload/js/Uploader.swf',
                    // 文件接收服务端。
                    server: 'http://webuploader.duapp.com/server/fileupload.php',
                    // 内部根据当前运行是创建，可能是input元素，也可能是flash. 选择文件的按钮。可选。
                    pick: '.AddBtn',
                    // 不压缩image, 默认如果是jpeg，文件上传前会压缩一把再上传！
                    resize: false,
                    auto:true
                });

                // 当有文件被添加进队列的时候
                uploader.on( 'fileQueued', function( file ) {
                    var $li = $('<li id="' + file.id + '">'+
                        '<div class="img">' +
                        '<img>'+
                        '</div>'+
                        '<div class="action">' +
                        '<p>'+file.name+'</p>'+
                        '<p class="state">等待上传...</p>' +
                        '<div class="error"></div>'+
                        '</div>'+
                        '</li>'),$img = $li.find('img');

                    $("#UpContainer>.FilsList>ul").append($li);
                    // 创建缩略图
                    // 如果为非图片文件，可以不用调用此方法。
                    // thumbnailWidth x thumbnailHeight 为 100 x 100
                    uploader.makeThumb( file, function( error, src ) {
                        if ( error ) {
                            $img.replaceWith('<span>不能预览</span>');
                            return;
                        }
                        $img.attr( 'src', src );
                    }, param.thumbnailWidth?param.thumbnailWidth:'110', param.thumbnailHeight?param.thumbnailHeight:'' );
                });

                // 文件上传过程中创建进度条实时显示。
                uploader.on( 'uploadProgress', function( file, percentage ) {
                    var $li = $( '#'+file.id ).find(".action"),
                        $percent = $li.find('.progress span');
                    // 避免重复创建
                    if ( !$percent.length ) {
                        $percent = $('<p class="progress"><span></span></p>')
                            .appendTo( $li )
                            .find('span');
                    }
                    $percent.css( 'width', percentage * 100 + '%' );
                });

                // 文件上传成功，给item添加成功class, 用样式标记上传成功。
                uploader.on( 'uploadSuccess', function( file ) {
                    $( '#'+file.id ).addClass('upload-state-done');
                    $( '#'+file.id ).find(".action .state").text("上传成功")
                });

                // 文件上传失败，显示上传出错。
                uploader.on( 'uploadError', function( file ) {
                    var $li = $( '#'+file.id ).find(".action"),
                        $error = $li.find('div.error');
                    // 避免重复创建
                    if ( !$error.length ) {
                        $error = $('<div class="error"></div>').appendTo( $li );
                    }
                    $error.text('上传失败');
                    $( '#'+file.id ).find(".action .state").hide()
                });

                // 完成上传完了，成功或者失败，先删除进度条。
                uploader.on( 'uploadComplete', function( file ) {
                    $( '#'+file.id ).find('.action .progress').remove();
                });
            },
            yes:function (index) {
                layer.close(index);
            }
        })
    });
}

//60 秒倒计时 js 实现
/*
 function settime(obj) {
 if (countdown == 0) {
 obj.removeAttribute("disabled");
 obj.value="免费获取验证码";
 countdown = 60;
 return;
 } else {
 obj.setAttribute("disabled", true);
 obj.value="重新发送(" + countdown + ")";
 countdown--;
 }
 setTimeout(function() {
 settime(obj)
 }
 ,1000)
 }*/
